package com.alipay.autoconfigure;

import com.alipay.AlipayTemplate;
import com.alipay.autoconfigure.properties.AlipayProperties;
import com.alipay.config.AlipayClientFactory;
import com.alipay.config.AlipayConfig;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author lwj
 * @create 2025-10-10-16:03
 *
 * 支付宝自动配置类：当配置 alipay.app-id 才生效
 */
@Configuration
// 启用配置属性绑定
@EnableConfigurationProperties(AlipayProperties.class)
// 存在 app-id 才生效
@ConditionalOnProperty(prefix = "alipay", name = "app-id")
public class AlipayAutoConfigure {

    /**
     * 创建 AlipayTemplate 实例（对外核心入口）
     * @param alipayProperties 配置属性
     * @return AlipayTemplate 实例
     */
    @Bean
    // 允许用户自定义实例覆盖默认
    @ConditionalOnMissingBean
    public AlipayTemplate alipayTemplate(AlipayProperties alipayProperties){
        // 创建配置类
        AlipayConfig alipayConfig = new AlipayConfig();
        // 对象赋值
        BeanUtils.copyProperties(alipayProperties, alipayConfig);

        // 初始化模板类
        return new AlipayTemplate(alipayConfig);
    }

    /**
     * 支付宝客户端工厂（工具包内部使用）
     * @param alipayProperties 配置属性
     * @return AlipayClientFactory 实例
     */
    @Bean
    public AlipayClientFactory alipayClientFactory(AlipayProperties alipayProperties){
        // 创建配置类
        AlipayConfig alipayConfig = new AlipayConfig(); // 对象赋值
        // 对象赋值
        BeanUtils.copyProperties(alipayProperties, alipayConfig);

        return new AlipayClientFactory(alipayConfig);
    }
}
